package com.spark.client.demo;

import com.spark.client.config.SparkConfig;
import com.spark.client.model.SparkMessage;
import com.spark.client.tool.SparkTool;
import com.spark.client.tool.ToolCallHandler;

import java.util.HashMap;
import java.util.Map;

/**
 * 简单演示程序
 * 不依赖网络请求，只演示 API 设计
 */
public class SimpleDemo {
    
    public static void main(String[] args) {
        System.out.println("=== SparkClient 简单演示 ===");
        
        // 演示配置创建
        demonstrateConfig();
        
        // 演示消息创建
        demonstrateMessages();
        
        // 演示工具创建
        demonstrateTools();
        
        System.out.println("\n=== 演示完成 ===");
        System.out.println("这个演示展示了 SparkClient 的 API 设计。");
        System.out.println("要进行实际的 AI 对话，请：");
        System.out.println("1. 在 application.yml 中配置真实的 API Key");
        System.out.println("2. 使用 SparkClient 进行实际调用");
    }
    
    /**
     * 演示配置创建
     */
    private static void demonstrateConfig() {
        System.out.println("\n--- 配置演示 ---");
        
        SparkConfig config = new SparkConfig();
        config.setApiKey("your-api-key-here");
        config.setModel("generalv3.5");
        config.setMaxTokens(4096);
        config.setTemperature(0.7);
        config.setEnableLogging(true);
        
        System.out.println("✓ 创建配置成功");
        System.out.println("  模型: " + config.getModel());
        System.out.println("  最大 Tokens: " + config.getMaxTokens());
        System.out.println("  温度: " + config.getTemperature());
        System.out.println("  启用日志: " + config.getEnableLogging());
    }
    
    /**
     * 演示消息创建
     */
    private static void demonstrateMessages() {
        System.out.println("\n--- 消息演示 ---");
        
        // 创建不同类型的消息
        SparkMessage userMessage = SparkMessage.user("你好，请介绍一下你自己");
        SparkMessage systemMessage = SparkMessage.system("你是一个专业的编程助手");
        SparkMessage assistantMessage = SparkMessage.assistant("你好！我是星火大模型。");
        SparkMessage toolMessage = SparkMessage.tool("天气查询结果", "tool_call_123");
        
        System.out.println("✓ 创建消息成功");
        System.out.println("  用户消息: " + userMessage.getRole() + " -> " + userMessage.getContent());
        System.out.println("  系统消息: " + systemMessage.getRole() + " -> " + systemMessage.getContent());
        System.out.println("  助手消息: " + assistantMessage.getRole() + " -> " + assistantMessage.getContent());
        System.out.println("  工具消息: " + toolMessage.getRole() + " -> " + toolMessage.getContent());
    }
    
    /**
     * 演示工具创建
     */
    private static void demonstrateTools() {
        System.out.println("\n--- 工具演示 ---");
        
        // 创建函数工具
        Map<String, Object> properties = new HashMap<>();
        properties.put("location", ToolCallHandler.stringProperty("要查询天气的城市"));
        properties.put("unit", ToolCallHandler.enumProperty("温度单位", new String[]{"celsius", "fahrenheit"}));
        
        SparkTool functionTool = ToolCallHandler.createFunctionTool(
            "get_weather", 
            "查询天气信息", 
            properties, 
            new String[]{"location"}
        );
        
        System.out.println("✓ 创建函数工具成功");
        System.out.println("  工具类型: " + functionTool.getType());
        System.out.println("  函数名称: " + functionTool.getFunction().getName());
        System.out.println("  函数描述: " + functionTool.getFunction().getDescription());
        
        // 创建联网搜索工具
        SparkTool webSearchTool = SparkTool.webSearch(true, false, "normal");
        
        System.out.println("✓ 创建联网搜索工具成功");
        System.out.println("  工具类型: " + webSearchTool.getType());
        System.out.println("  启用状态: " + webSearchTool.getWebSearch().getEnable());
        System.out.println("  搜索模式: " + webSearchTool.getWebSearch().getSearchMode());
        
        // 演示工具调用处理器
        ToolCallHandler handler = new ToolCallHandler();
        handler.registerFunction("test_function", params -> {
            return "测试函数执行成功: " + params.toString();
        });
        
        System.out.println("✓ 注册函数成功");
        System.out.println("  已注册函数: " + handler.getRegisteredFunctions());
        
        // 演示属性创建辅助方法
        Map<String, Object> stringProp = ToolCallHandler.stringProperty("字符串参数");
        Map<String, Object> numberProp = ToolCallHandler.numberProperty("数字参数");
        Map<String, Object> booleanProp = ToolCallHandler.booleanProperty("布尔参数");
        
        System.out.println("✓ 创建参数属性成功");
        System.out.println("  字符串属性: " + stringProp.get("type"));
        System.out.println("  数字属性: " + numberProp.get("type"));
        System.out.println("  布尔属性: " + booleanProp.get("type"));
    }
}
